1. Field
This application relates generally to visualization tools for computer processes and, more specifically, to computer systems and processes for visualizing the state of parallel dependency graph evaluation in computer animation.
2. Related Art
Visualization tools are available for displaying a graphical representation of the performance of a computer program. For example, traditional visualization tools may provide a heat map that aids programmers, among others, to identify the most expensive, lengthy processes or functions that account for longer program runtimes and decreased user satisfaction. A programmer may then focus on optimizing the most expensive, lengthy processes or functions so as to have the greatest impact on decreasing runtime and improving user satisfaction.
However, while traditional visualization tools may be helpful for serial processes, they are less helpful and may even be misleading for multithreaded programs with processes running in parallel. To take advantage of multi-core processors capable of processing two, four, eight, twelve, sixteen, or more threads in parallel, programmers, among others, are designing programs with multiple threads that can run simultaneously, thereby decreasing runtime and improving overall performance. Traditional visualization tools may identify lengthy processes running on each of the multiple cores, but optimizing those processes may, in fact, have little or no impact on a program's overall runtime, thereby misleading programmers and wasting time.
For example, a lengthy process may run concurrently with a chain of serially dependent processes that run for a longer period of time than the concurrently running lengthy process. Traditional visualization tools may suggest that optimizing the lengthy process will decrease overall runtime when, in fact, it will have no effect on the overall runtime since the serially dependent processes running concurrently, despite each being shorter in duration, together are of a longer duration. In such a case, optimization efforts should be directed at the serially dependent processes, but current visualization tools may not lead to that conclusion.
Optimization concerns are especially pertinent in the area of computer animation, where hundreds of thousands of animation frames may be processed to create the complex and detailed scenes in today's animated films. Character technical directors, character riggers, and the like may develop a dependency graph to render, animate, or otherwise describe a scene in an animation. A dependency graph may be made up of interconnected nodes, each of which may be a standalone computation unit that takes in data via one or more input attributes, performs some computation on the data, and produces one or more output attributes. The connections in the graph may represent data flowing from one node to the next, with each node performing some computation on the data it receives to generate its output. A node may have multiple inputs and multiple outputs, as well as other attributes.
Many nodes may be computed simultaneously on multiple processor cores, but computing chains of nodes, each depending on the last, may require significant processing time. Optimization efforts should, therefore, be directed at those chains of nodes that directly impact the time it takes to evaluate a dependency graph. However, traditional visualization tools may lead character technical directors, character riggers, and the like to focus on optimizing non-critical nodes rather than the key nodes that directly impact the time it takes for the dependency graph to evaluate.
Thus, an improved visualization tool for parallel dependency graphs (as well as other multithreaded computer processes) is desired.